package co.edu.usbcali.lidis.dataaccess.daoFactory;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import co.edu.usbcali.lidis.dataaccess.conexionbd.ConnectionManager;
import co.edu.usbcali.lidis.modelo.Proyecto;
import co.edu.usbcali.lidis.modelo.Usuario;

public class FachadaBaseDeDatos {

	private  Connection connection;

	private static FachadaBaseDeDatos me = null;

	private FachadaBaseDeDatos() {

	}

	public static FachadaBaseDeDatos getInstance() {
		if (me == null) {
			me = new FachadaBaseDeDatos();
		}

		try {
			if (me.getConnection() == null
					|| me.getConnection().isClosed() == true) {
				me.setConnection(ConnectionManager.getConnection());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return me;
	}

	public void setConnection(Connection connection) {
		this.connection = connection;
	}

	public Connection getConnection() {
		return connection;
	}

	public Integer iniciarSesion(Usuario usu) throws Exception {
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "SELECT USU_ID, USU_USUARIO, USU_PASSWORD from usuario WHERE USU_USUARIO=? and USU_PASSWORD=?";
		try {
			pst = connection.prepareStatement(sql);
			pst.setString(1, usu.getUsuUsuario());
			pst.setString(2, usu.getUsuPassword());
			rs = pst.executeQuery();
			if (rs.next()) {
				Usuario usuario=new Usuario();
				usuario.setUsuId(rs.getInt("USU_ID"));
				return rs.getInt("USU_ID");
			}
			return 0;
		} catch (Exception e) {
			throw e;
		} finally {
			if (pst != null) {
				pst.close();
			}
		}
	}
	
	
	public  int proyectosRecomendar(String palabrasclaves) throws Exception {
		Integer resultadoFuncion = 0;
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "select f_proyectos_recomendar from f_proyectos_recomendar(?)";
		try {
			pst = connection.prepareStatement(sql);
			pst.setString(1, palabrasclaves);
			rs = pst.executeQuery();
			if (!rs.next()) {
				return 1;
			}
		} catch (Exception e) {

			throw e;

		} finally {
			if (rs != null) {
				rs.close();
			}
			if (pst != null) {
				pst.close();
			}
		}
		return resultadoFuncion;
	}
	
	
	public boolean guadarProyecto(Proyecto proyecto) throws Exception {

		PreparedStatement pst = null;
		String sql = "INSERT INTO proyecto(pro_titulo, pro_palclave, pro_obj_general, pro_obj_espec, pro_contenido, usu_id) VALUES (?, ?, ?, ?, ?, ?)";
		try {
			pst = connection.prepareStatement(sql);
			pst.setString(1, proyecto.getProTitulo());
			pst.setString(2, proyecto.getProPalclave());
			pst.setString(3, proyecto.getProObjGeneral());
			pst.setString(4, proyecto.getProObjEspecificos());
			pst.setString(5, proyecto.getProContenido());
			pst.setInt(6, proyecto.getUsuario().getUsuId());
			pst.execute();
		} catch (Exception e) {
			return false;
		} finally {
			if (pst != null) {
				pst.close();
			}
		}
		return true;
	}
	

	public static void main(String args[]){
			
		FachadaBaseDeDatos baseDeDatos=new FachadaBaseDeDatos();
		try {
			if (baseDeDatos.proyectosRecomendar("BASE DE DATOS,DDL")==0) {
				System.out.println("ok");
			}else{
				System.out.println("1");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	

	public int ejecutaModelo(String palClave) throws Exception {
		
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "SELECT f_proyectos_recomendar FROM f_proyectos_recomendar(?)";
		
		try {
			pst = connection.prepareStatement(sql);
			pst.setString(1, palClave);
			rs = pst.executeQuery();

			while (rs.next()) {	
				return rs.getInt("f_proyectos_recomendar");
			}
			return 1;
		} catch (Exception e) {
			throw e;
		} finally {
			if (pst != null) {
				pst.close();
			}
		}
	}
	
	public Proyecto consultarProyectoPorId(Long proyectoId) throws Exception {

		PreparedStatement pst = null;
		ResultSet rs = null;
		Proyecto proyecto = null;
		String sql = "SELECT pro_id, pro_titulo, pro_palclave, pro_obj_general, pro_obj_espec, pro_contenido FROM proyecto WHERE pro_id = ?";
		try {
			pst = connection.prepareStatement(sql);
			pst.setLong(1, proyectoId);
			rs = pst.executeQuery();

			while (rs.next()) {
				proyecto = new Proyecto();
				proyecto.setProId(rs.getLong("pro_id"));
				proyecto.setProTitulo(rs.getString("pro_titulo"));
				proyecto.setProPalclave(rs.getString("pro_palclave"));
				proyecto.setProObjGeneral(rs.getString("pro_obj_general"));
				proyecto.setProObjEspecificos(rs.getString("pro_obj_espec"));
				proyecto.setProContenido(rs.getString("pro_contenido"));
			}
		} catch (Exception e) {
			throw e;
		} finally {
			if (rs != null) {
				rs.close();
			}
			if (pst != null) {
				pst.close();
			}
		}
		return proyecto;
	}
}
